<?php
class NotificarCaducidadTask extends sfBaseTask
{
  protected function configure()
  {
    $this->addOptions(array(
      new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application', 'frontend'),
      new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environement', 'prod'),
      new sfCommandOption('days', null, sfCommandOption::PARAMETER_REQUIRED, 'Los días que faltan para que caduquen los artículos', 0),
    ));
 
    $this->namespace = 'catalogo';
    $this->name = 'notificar-caducidad';
    $this->briefDescription = 'Notifica a los usuarios de los artículos que caducan en X días';
 
    $this->detailedDescription = <<<EOF
La tarea [catalogo:notificar-caducidad|INFO] notifica a los usuarios que sus artículos caducan en X días:
 
  [./symfony catalogo:notificar-caducidad --env=prod --days=0|INFO]
EOF;
  }
 
  protected function execute($arguments = array(), $options = array())
  {
    $databaseManager = new sfDatabaseManager($this->configuration);
    
    $q = Doctrine_Query::create()
      ->from('Articulo a')
      ->where('a.updated_at <= ?', date("Y-m-d", time() + 86400 * ($options["days"] - 30 + 2)));
    $this->logSection('log', 'Los articulos creados el ' . date("Y-m-d", time() + 86400 * ($options["days"] - 30)) . ' vencen en '.$options['days']. ' dias.');
    //$this->logSection('log', $q->getSqlQuery());
   
    $arts = $q->execute();
    foreach ($arts as $art)
    {
    	$this->enviarNotificacion($art, (!$options['days']?0:$options['days']));
    	$this->logSection('log', $art->getUpdatedAt() . ' | ' . $art->getTitulo());
    }
   
    $this->logSection('catalogo', count($arts) . ' articulos han sido notificados que caducan en '.$options['days']. ' dias.');   
  }
  
 protected function getProductionRouting()
  {
    $routing = $this->getRouting();
    $routingOptions = $routing->getOptions();
    $routingOptions['context']['host'] = 'http://www.porquenuevo.com.ar';
    $routing->initialize($this->dispatcher, $routing->getCache(), $routingOptions);
    return $routing;
  }
  
  protected function enviarNotificacion($articulo, $dias)
  {
    $titulo  = $articulo->getTitulo();
  	$usuario = $articulo->getUsuario();
    $email   = $usuario->getEmail();
            
    $username = substr($email, 0, strpos($email, '@'));
    $routing = ProjectConfiguration::getRouting();
    
    $enlace_articulo = '<a href="' . $routing->generate('ficha_aviso', $articulo, true). 
                    '">'.$titulo.'</a>';

    $enlace_republicar = '<a href="' . $routing->generate('republicar_aviso', $articulo, true). 
                    '">aquí</a>';
        
    $enlace_pqn = '<a href="' . $routing->generate('homepage', array(), true). '">PorQueNuevo</a>';

    // send an email to the user
    $body = <<<EOF
Hola {$username},

Tu artículo "{$enlace_articulo}" caduca en {$dias} días.
Republicá tu artículo haciendo click {$enlace_republicar}.

Muchas gracias por elegirnos.
El equipo de {$enlace_pqn}.
EOF;

    $message = $this->getMailer()->compose();
    $message->setSubject('PorQueNuevo: Tu artículo caduca en ' . $dias . ' días. Republicalo con 1 sólo click!');
    $message->setTo($email);
    $message->setFrom(array('info@porquenuevo.com.ar' => 'PorQueNuevo'));
    $message->setBody(nl2br($body), 'text/html');
 
    $this->getMailer()->send($message);
  	
  }
}